package com.xpqh.ksg.modular.warranty.controller;

import com.xpqh.ksg.base.BaseController;
import com.xpqh.ksg.base.BaseResponseDTO;
import com.xpqh.ksg.common.enums.result.BizExceptionEnum;
import com.xpqh.ksg.common.persistence.model.KsgWarrantyInfo;
import com.xpqh.ksg.modular.users.service.KsgUsersService;
import com.xpqh.ksg.modular.warranty.dto.KsgAddWarrantyInfoReqDTO;
import com.xpqh.ksg.modular.warranty.dto.WarrantyDetailsReqDTO;
import com.xpqh.ksg.modular.warranty.dto.WarrantyInfoReqDTO;
import com.xpqh.ksg.modular.warranty.service.WarrantyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * 保修控制器
 * 提供保修信息相关的API接口，包括查询保修列表、获取个人保修信息、保存保修信息等功能
 * 
 * @author system
 * @since 1.0.0
 */
@RestController
@RequestMapping("/ksg/warranty")
public class WarrantyController extends BaseController {

    /**
     * 保修服务，用于处理保修相关的业务逻辑
     */
    @Autowired
    private WarrantyService warrantyService;
    
    /**
     * 用户服务，用于获取用户信息
     */
    @Autowired
    private KsgUsersService usersService;

    /**
     * 根据手机号查询保修信息列表
     */
    @PostMapping("/list")
    public BaseResponseDTO list(@Valid @RequestBody WarrantyInfoReqDTO req) {
        // 根据手机号获取保修信息列表
        List<KsgWarrantyInfo> warrantyList = warrantyService.getWarrantyList(req.getPhone());
        
        // 如果查询到保修信息，返回成功结果
        if (warrantyList != null) {
            return renderResultOk(warrantyList);
        }
        
        // 如果没有查询到保修信息，返回错误信息
        return renderResult(BizExceptionEnum.PRODUCT_ERROR3);
    }

    /**
     * 根据手机号查询保修信息列表
     */
    @PostMapping("/details")
    public BaseResponseDTO details(@Valid @RequestBody WarrantyDetailsReqDTO req) {
        // 根据手机号获取保修信息列表
        KsgWarrantyInfo ksgWarrantyInfo = warrantyService.getWarrantyDetails(req.getWarrantyId());

        // 如果查询到保修信息，返回成功结果
        if (ksgWarrantyInfo != null) {
            return renderResultOk(ksgWarrantyInfo);
        }

        // 如果没有查询到保修信息，返回错误信息
        return renderResult(BizExceptionEnum.PRODUCT_ERROR3);
    }

    /**
     * 获取当前登录用户的保修信息列表
     */
    @GetMapping("/myWarranty")
    public BaseResponseDTO myWarranty() {
        // 获取当前登录用户的手机号，然后查询保修信息
        List<KsgWarrantyInfo> warrantyList = warrantyService.getWarrantyList(usersService.get(getUserId()).getPhone());
        
        // 如果查询到保修信息，返回成功结果
        if (warrantyList != null) {
            return renderResultOk(warrantyList);
        }
        
        // 如果没有查询到保修信息，返回错误信息
        return renderResult(BizExceptionEnum.PRODUCT_ERROR3);
    }

    /**
     * 保存保修信息
     */
    @PostMapping("/saveWarranty")
    public BaseResponseDTO saveWarranty(@Valid @RequestBody KsgAddWarrantyInfoReqDTO req) {
        // 设置当前登录用户ID到请求对象中
        req.setUserId(getUserId());
        
        // 调用服务层保存保修信息
        return warrantyService.saveWarranty(req);
    }

}

